package edu.zut.hb.software.capiturevictor.maintain.service.impl;


import java.util.List;

import org.apache.poi.ss.formula.functions.Countif.StringMatcher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.ExampleMatcher;
import org.springframework.data.domain.ExampleMatcher.GenericPropertyMatchers;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import edu.zut.hb.software.capiturevictor.base.service.impl.GenericManagerImpl;
import edu.zut.hb.software.capiturevictor.maintain.dao.InformationDao;
import edu.zut.hb.software.capiturevictor.maintain.domain.Information;
import edu.zut.hb.software.capiturevictor.maintain.service.InformationManager;

@Service("InformationManager")
@Component
public class InformationMangaerImpl extends GenericManagerImpl<Information, Long> implements InformationManager{

	InformationDao informationDao;

	@Override
    public List<Information> findByFullname(String fullname) {
		// 创建查询条件数据对象
				Information queryObject = new Information();
				queryObject.setEntityName(fullname);
				// 创建匹配器，即如何使用查询条件
				ExampleMatcher matcher = ExampleMatcher.matching() // 构建对象
						.withMatcher("fullname", GenericPropertyMatchers.startsWith()) // 姓名采用“开始匹配”的方式查询
						.withIgnorePaths("dateCreated", "dateModified"); // 忽略属性：是否关注。因为是基本类型，需要忽略掉
				// 创建实例并查询
				Example<Information> ex = Example.of(queryObject, matcher);
				List<Information> result = dao.findAll(ex);
				return result;
    }

	@Override
	public List<Information> findByPostcode(String postcode) {

		// 创建查询条件数据对象
		Information queryObject = new Information();
		queryObject.setDateCreated(null);
		queryObject.setDateModified(null);
		queryObject.setPostcode(postcode);
		// 创建匹配器，即如何使用查询条件
		// 创建匹配器，即如何使用查询条件
		ExampleMatcher matcher = ExampleMatcher.matching() // 构建对象
				.withStringMatcher(StringMatcher.CONTAINING) // 改变默认字符串匹配方式：模糊查询
				.withIgnoreCase(true) // 改变默认大小写忽略方式：忽略大小写
				.withMatcher("postcode", GenericPropertyMatchers.startsWith()); // 地址采用“开始匹配”的方式查询
		// 创建实例并查询
		Example<Information> ex = Example.of(queryObject, matcher);
		List<Information> result = dao.findAll(ex);
		return result;
	}
    @Autowired
    public void setInformationDao(InformationDao informationDao) {
        this.informationDao = informationDao;
        this.dao = this.informationDao;
    }

}
